264. Ugly Number II(丑数 II)
链接
https://leetcode-cn.com/problems/ugly-number-ii
题目
编写一个程序,找出第 n 个丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
思路
比上一题带劲,本来打算打表打个卡的,结果发现了一个三指针法,效果很好。
任意丑数都是比这个数小的丑数乘以2,3,5其中之一得到的,要求按照顺序排列,那么就从之前的数中找到未被使用过的数乘一下,然后比较,就可以得到新的数了。
首先初始位为1,设三个指针值n2,n3,n5,初始设为0.之后开始循环,每次循环都找到235未乘过的数字乘一下,然后取最小值为新的丑数。之后,若n2n3n5使用过了,那么指针位+1,下次乘下一个数字,如果都可以,那就都加。把数字记录下来最后输出即可。
代码
1 | public static int nthUglyNumber(int n) { |